package main

import (
	"go-tour/pkg/my_image"
	"golang.org/x/tour/pic"
	"image"
	"image/color"
)

/*
https://tour.go-zh.org/methods/23
练习：图像
还记得之前编写的图片生成器 吗？我们再来编写另外一个，不过这次它将会返回一个 image.Image 的实现而非一个数据切片。

定义你自己的 Image 类型，实现必要的方法并调用 pic.ShowImage。

Bounds 应当返回一个 image.Rectangle ，例如 image.Rect(0, 0, w, h)。

ColorModel 应当返回 color.RGBAModel。

At 应当返回一个颜色。上一个图片生成器的值 v 对应于此次的 color.RGBA{v, v, 255, 255}。
*/
type Image struct {
	Width  int
	Height int
	Data   [][]uint8
}

func (i Image) ColorModel() color.Model {
	return color.RGBAModel
}

func (i Image) Bounds() image.Rectangle {
	return image.Rect(0, 0, i.Width, i.Height)
}

func (i *Image) ProduceData() {
	i.Data = my_image.Pic(i.Width*i.Height, 2)
}

func (i Image) At(x, y int) color.Color {
	if i.Data == nil {
		i.ProduceData()
	}
	return color.RGBA{i.Data[0][x*y], i.Data[1][x*y], 255, 255}
}

func main() {
	m := Image{Width: 10, Height: 10,
		//Data: my_image.Pic(100, 2),
	}
	m.ProduceData()
	pic.ShowImage(m)
}
